package com.example.optimizaapp.domain;

import java.util.ArrayList;
import java.util.Date;
import java.util.concurrent.ExecutionException;

import com.example.optimizaapp.domain.Utilities.AgregarSolucion;
import com.example.optimizaapp.domain.Utilities.Constants;
import com.example.optimizaapp.domain.Utilities.GetClasificacionIncidente;
import com.example.optimizaapp.domain.Utilities.GetEstadosIncidente;
import com.example.optimizaapp.domain.Utilities.GetPrioridadesIncidente;
import com.example.optimizaapp.domain.Utilities.ModificarIncidente;
import com.example.optimizaapp.domain.EstadoIncidente;
import android.util.Log;

public class ManejadorIncidente {

	private static ManejadorIncidente manejadorIncidente;
	private ManejadorUsuario mu = ManejadorUsuario.getManejadorUsuario();
	private ArrayList <Incidente> incidentes;
	private ArrayList <EstadoIncidente> estados;
	private ArrayList <ClasificacionIncidente> clasificacionesIncidente;
	private ArrayList <PrioridadIncidente> prioridadesIncidente;
	
	private  ManejadorIncidente() {
		// TODO Auto-generated constructor stub
	}
	
	public static ManejadorIncidente getManejadorIncidente() {
		if (manejadorIncidente == null) {
			manejadorIncidente = new ManejadorIncidente();
		}
		return manejadorIncidente;
	}
	
	
			
	public ArrayList<PrioridadIncidente> getPrioridadesIncidente() {
		return prioridadesIncidente;
	}

	public void setPrioridadesIncidente(
			ArrayList<PrioridadIncidente> prioridadesIncidente) {
		this.prioridadesIncidente = prioridadesIncidente;
	}

	public ArrayList<ClasificacionIncidente> getClasificacionesIncidente() {
		return clasificacionesIncidente;
	}

	public void setClasificacionesIncidente(
			ArrayList<ClasificacionIncidente> clasificacionesIncidente) {
		this.clasificacionesIncidente = clasificacionesIncidente;
	}

	public ArrayList<EstadoIncidente> getEstados() {
		return estados;
	}

	public void setEstados(ArrayList<EstadoIncidente> estados) {
		this.estados = estados;
	}

	public ArrayList<Incidente> getIncidentes() {
		return incidentes;
	}

	public void setIncidentes(ArrayList<Incidente> incidentes) {
		this.incidentes = incidentes;
	}

		
	public void crearClasificacionIncidentes(){
		
		GetClasificacionIncidente gc = new GetClasificacionIncidente();
		this.clasificacionesIncidente = new ArrayList<ClasificacionIncidente>();
		gc.execute(Constants.SERVICIO_TODOS_CLASIFICACION_INCIDENTE);
		
		
	}
	
	public void llenarEstados (){
		GetEstadosIncidente ge = new GetEstadosIncidente();
		this.estados = new ArrayList<EstadoIncidente>();
		ge.execute(Constants.SERVICIO_TODOS_ESTADO_INCIDENTE);
						
	}
	
	public void llenarPrioridades(){
		GetPrioridadesIncidente gp = new GetPrioridadesIncidente();
		this.prioridadesIncidente = new ArrayList<PrioridadIncidente>();
		gp.execute(Constants.SERVICIO_TODOS_PRIORIDAD);
	}
		
	public void modificarIncidente (Incidente incidente){
		if (incidente.getSolucion() == null){
			String url = Constants.SERVICIO_ACTUALIZAR_ESTADO_INCIDENTES + "idIncidente="+ incidente.getIdIncidente() + "&estado=" + incidente.getEstadoIncidente().getId(); 
			ModificarIncidente modificarIncidente = new ModificarIncidente();
			modificarIncidente.execute(url);
			
		}
	}
	
	public void agregarSolucion (Incidente incidente){
		//Servicio para agregar una solucion a un incidente
		String url = Constants.SERVICIO_AGREGAR_SOLUCION_INCIDENTES + "idIncidente="+ incidente.getIdIncidente() + "&solucion='" + incidente.getSolucion()+ "'"; 
		AgregarSolucion agregarSolucion = new AgregarSolucion();
		agregarSolucion.execute(url);
	}
	
	public EstadoIncidente estadoSegunId (int id){
		
		for (int i = 0; i<this.estados.size(); i++){
			EstadoIncidente e = (EstadoIncidente)this.estados.get(i);
			if (e.getId()== id){
				return e;
			}
		}
		return null;
	}
	
	public ClasificacionIncidente clasificacionSegunId (int id){
		
		for (int i = 0; i<this.clasificacionesIncidente.size(); i++){
			ClasificacionIncidente e = (ClasificacionIncidente)this.clasificacionesIncidente.get(i);
			if (e.getId()== id){
				return e;
			}
		}
		return null;
	}
	
	public PrioridadIncidente prioridadSegunId (int id){
		
		for (int i = 0; i<this.prioridadesIncidente.size(); i++){
			PrioridadIncidente e = (PrioridadIncidente)this.prioridadesIncidente.get(i);
			if (e.getId()== id){
				return e;
			}
		}
		return null;
	}

	
	
}
